// 定义接口
const router = require('koa-router')();
const { userLogin, userFind, userRegister } = require('../controllers/index.js')
const { sign, verify } = require('../utils/jwt.js')
router.prefix('/user'); // 添加路由前缀
// koa有个问题 不能解析post传来的参数，需要安装koa-bodyparser


router.post('/login', async (ctx) => {
    // 获取到前端传递的账号密码，去数据库中进行校验

    const { username, password } = ctx.request.body;
    try {
        // 去数据库进行校验
        const result = await userLogin(username, password)
        console.log(result);
        if (result.length) {
            let data = {
                id: result[0].id,
                nickname: result[0].nickname,
                username: result[0].username
            }
            // 生成token
            // 调用了抛出的sign方法,传入了参数，设置了管理员权限
            let token = sign({ id: result[0].id, username: result[0].username, admin: true })
            console.log(token);
            // 登入成功
            ctx.body = {
                data: data,
                code: '8000',
                msg: '登录成功',
                token: token
            }

        } else {
            ctx.body = {
                data: data,
                code: '8004',
                msg: '登录失败,账号或密码错误'
            }
        }
    } catch (err) {
        ctx.body = {
            code: '8005',
            msg: '服务器异常',
            data: err
        }
    }
})

// 获取到前端传递的账号密码，准备存储到数据库中
router.post('/register', async (ctx) => {

    const { username, password, nickname } = ctx.request.body;
    // 校验账号密码和昵称是否为空
    let msg = ''
    if (!username || !password || !nickname) {
        msg = '账号密码或昵称不能为空'
        ctx.body = {
            code: '8001',
            msg: msg
        }
        return
    }

    try {
        // 校验账号是否存在
        const findRes = await userFind(username)

        if (findRes.length) { // 账号已存在
            ctx.body = {
                code: '8003',
                msg: '账号已存在',
                data: 'error'
            }
            return
        }
        // 账号不存在，可以注册, 存储到数据库中
        const registerRes = await userRegister(username, password, nickname)
        console.log(registerRes); // registerRes.affectedRows=1 影响了一条数据
        if (registerRes.affectedRows) {
            ctx.body = {
                code: '8000',
                msg: '注册成功',
                data: 'success'
            }
        } else {
            ctx.body = {
                code: '8004',
                msg: '注册失败',
                data: 'error'
            }
        }
    } catch (err) {
        ctx.body = {
            code: '8005',
            msg: '服务器异常',
            data: err
        }

    }
})

// 测试token
router.post('/home', verify(), (ctx) => {
    ctx.body = {
        code: '8000',
        data: '首页数据'
    }
})


module.exports = router;

